package pos.domain;

import java.util.*;
import pos.data.*;

public class RutaAleatoria {
	private Calle calleIni;
	private Calle calleFin;
	private List<Calle> listaRuta = new ArrayList<Calle>();
	
	public RutaAleatoria(Calle calleIni, Calle calleFin) {
		super();
		this.calleIni = calleIni;
		this.calleFin = calleFin;
		listaRuta.add(calleIni);
		setRuta();
		listaRuta.add(calleFin);
	}
	
	public RutaAleatoria() {
		super();
		JDBCCalleDAO calleDao = new JDBCCalleDAO();
		int idCalle = (int) (Math.random()*4000+1);
		calleIni = calleDao.selectByID(idCalle);
		calleIni.setEstaciones(calleDao.selectEstacionesCercanas(calleIni));
		idCalle = (int) (Math.random()*4000+1);
		calleFin = calleDao.selectByID(idCalle);
		calleFin.setEstaciones(calleDao.selectEstacionesCercanas(calleFin));
		listaRuta.add(calleIni);
		setRuta();
		listaRuta.add(calleFin);
	}

	private void setRuta(){
		int numCalles = (int) (Math.random()*15+1)+3;
		JDBCCalleDAO calleDao = new JDBCCalleDAO();
		JDBCBarrioDAO barrioDAO = new JDBCBarrioDAO();
		Barrio inicio = calleIni.getBarrio();
		Barrio fin = calleFin.getBarrio();
		
		if(inicio.getIdBarrio()==fin.getIdBarrio()){
			//la lista tiene calles de ese barrio
			for(int i=0;i<numCalles;i++){
				Calle c = calleDao.selectCalleByBarrio(calleIni.getBarrio());
				listaRuta.add(c);
			}
		}else{
			List<Integer> col = inicio.getColindantes();
			if(col.contains(fin.getIdBarrio())){
				//la lista tiene las primeras calle del barrio origen
				//y las ultimas del barrio destino
				for(int i=0;i<numCalles/2;i++){
					Calle c = calleDao.selectCalleByBarrio(calleIni.getBarrio());
					listaRuta.add(c);
				}
				for(int i=0;i<numCalles/2;i++){
					Calle c = calleDao.selectCalleByBarrio(calleFin.getBarrio());
					listaRuta.add(c);
				}
			}else{
				//la lista tiene las primeras calles del barrio origen, 
				//después del barrio centro 
				//y por último del barrio destino
				for(int i=0;i<numCalles/3;i++){
					Calle c = calleDao.selectCalleByBarrio(calleIni.getBarrio());
					listaRuta.add(c);
				}
				for(int i=0;i<numCalles/3;i++){
					Barrio centro = barrioDAO.selectByNombre("centro");
					Calle c = calleDao.selectCalleByBarrio(centro);
					listaRuta.add(c);
				}
				for(int i=0;i<numCalles/3;i++){
					Calle c = calleDao.selectCalleByBarrio(calleFin.getBarrio());
					listaRuta.add(c);
				}
			}
		}
	}

	public Calle getCalleIni() {
		return calleIni;
	}

	public void setCalleIni(Calle calleIni) {
		this.calleIni = calleIni;
	}

	public Calle getCalleFin() {
		return calleFin;
	}

	public void setCalleFin(Calle calleFin) {
		this.calleFin = calleFin;
	}

	public List<Calle> getListaRuta() {
		return listaRuta;
	}
}
